package ihm.commun.converter;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;

/**
 * Le fameux "GenericConverter" utilisé pour les SelectItems JSF afin de pouvoir
 * mapper directerement vers des instances d'objets.
 *
 * @author FX
 */
@ManagedBean
@ViewScoped
public class GenericConverter implements Converter, Serializable {

    /**
     * Constructeur de la classe <code>GenericConverter</code>.
     */
    public GenericConverter() {
    }

    /**
     * Default serialVersionUID
     */
    private static final long serialVersionUID = 1L;
    /**
     * tempStorage
     */
    private Map<UUID, Object> tempStorage = new HashMap<UUID, Object>();

    /**
     * @see
     * javax.faces.convert.Converter#getAsObject(javax.faces.context.FacesContext,
     * javax.faces.component.UIComponent, java.lang.String)
     */
    @Override
    public Object getAsObject(FacesContext pContext, UIComponent pComponent, String pValue) {
        Object vObj = null;
        try {
            if (!pValue.equals("")) {
                vObj = tempStorage.get(UUID.fromString(pValue));
            }
        } catch (IllegalArgumentException e) {
            vObj = null;
        }
        return vObj;
    }

    /**
     * @see
     * javax.faces.convert.Converter#getAsString(javax.faces.context.FacesContext,
     * javax.faces.component.UIComponent, java.lang.Object)
     */
    @Override
    public String getAsString(FacesContext pContext, UIComponent pComponent, Object pValue) {
        UUID vId = UUID.randomUUID();
        tempStorage.put(vId, pValue);
        return vId.toString();
    }
}
